import SparkMD5 from "spark-md5";


const getFileChunk = (file, index, chunkSize) => {
    // 定义一个Promise对象，用于异步处理文件读取操作
    return new Promise((resolve, reject) => {
        // 计算开始和结束位置
        let start = index * chunkSize;
        let end = start + chunkSize;
        // 创建一个FileReader对象，用于读取文件内容
        let fileReader = new FileReader();
        // 根据开始和结束位置，截取文件
        let blob = file.slice(start, end);
        // 创建一个SparkMD5.ArrayBuffer对象，用于计算文件校验和
        let spark = new SparkMD5.ArrayBuffer();
        // 监听FileReader的load事件，将读取到的文件内容添加到SparkMD5实例中
        fileReader.onload = (e) => {
            spark.append(e.target.result)
            resolve({
                start,
                end,
                index,
                blob,
                has: spark.end()
            });
        }
        // 开始读取文件
        fileReader.readAsArrayBuffer(blob);
    })
}


onmessage = async (e) => {
    const {chunkCount, file, chunkSize, start, end} = e.data;
    for (let i = start; i < end; i++) {
        getFileChunk(file, i, chunkSize).then((e) => {
            postMessage(e)
        })
    }
}